package com.my;


import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil;
import com.github.wxpay.sdk.WXPayUtil;
import com.my.model.PayProperties;
import com.my.model.WeChatPay;
import com.my.model.WeChatPayService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

/**
 * 测试类
 * @author shuqingyou 2022/9/17
 */
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class weChatPayTest {
//    @Resource
    @Autowired
    private PayProperties payProperties;

    /**
     * 微信支付 统一预下单接口
     * 测试接口
     */
    @Test
    public void createUnifiedorderTest() {
        Map<String, Object> ResultMap = new HashMap<String, Object>();
        try {
            WeChatPay weChatPay = new WeChatPay();
            weChatPay.setAppid(payProperties.getAppid())//公众号appid
                    .setMch_id(payProperties.getMch_id()) // 商户号
                    .setApi_key(payProperties.getApi_key())//api密钥
                    .setNonce_str(WXPayUtil.generateNonceStr())// 32位随机字符串
                    .setBody("小米MIX3 12+568国行陶瓷黑")// 商品描述
                    .setTotal_fee("0.01") //标价金额
                    .setOut_trade_no(IdUtil.simpleUUID())// 商户订单号 唯一
                    .setSpbill_create_ip("10.1.1.10")// 终端IP
                    .setNotify_url("https://www.baidu.com")//异步回调地址
                    .setTrade_type("NATIVE") // 交易类型 JSAPI--JSAPI支付（或小程序支付）、NATIVE--Native支付、APP--app支付，MWEB--H5支付
                    //.setSub_mch_id("1609469848")//子商户号 微信支付 分配的子商户号（服务商模式的时候填入）
                    .setAttach("附加数据NO.1");//附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
            ResultMap = WeChatPayService.Unifiedorder(weChatPay);
            log.info("返回结果：{}",JSONUtil.toJsonStr(ResultMap));
        } catch (Exception e) {
            ResultMap.put("code", 2);
            ResultMap.put("msg", "系统异常错误代码：" + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 查询微信订单交易状态
     */
    @Test
    public void QueryPayStatus() {
        Map<String, Object> ResultMap = new HashMap<String, Object>();
        try {
            //todo // 商户订单号 唯一
            String out_trade_no = "a1fa1f29a4e6402296eae4c8323c6120";
            WeChatPay weChatPay = new WeChatPay();
            weChatPay.setAppid(payProperties.getAppid())//公众号appid
                    .setMch_id(payProperties.getMch_id()) // 商户号
                    .setApi_key(payProperties.getApi_key())//api密钥
                    .setNonce_str(WXPayUtil.generateNonceStr())// 32位随机字符串
                    .setOut_trade_no(out_trade_no);// 商户订单号 唯一
            //.setSub_mch_id("1603126310");//子商户号 微信支付 分配的子商户号（服务商模式的时候填入）

            /**查询订单交易状态**/
            ResultMap=WeChatPayService.QueryPayStatus(weChatPay);
            log.info("返回结果：{}",JSONUtil.toJsonStr(ResultMap));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}